package com.codingfuture.glaciercollect.quart;

import com.codingfuture.glaciercommon.util.System;
import org.quartz.*;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Set;

/**
 * @Author: Sun
 * @DateTime: 2025/4/1 15:13
 * @Description:
 **/
@Component
public class WarmHumidQuartz {
    @Autowired
    private Scheduler scheduler;

    private WarmHumidQuartz() {
    }

    /**
     * 开启一个新的温湿度生成任务
     *
     * @param messageid           任务组名，也是设备的唯一标识
     * @param intervalCron 任务执行的时间间隔（Cron 表达式）
     */
    public void startDevice(String messageid, String intervalCron) {
        try {
            // 创建一个 JobDetail 对象，指定要执行的任务类为 WarmHumidJob
            JobDetail job = JobBuilder.newJob(WarmHumidJob.class)
                    .withIdentity("WarmHumidJob_" + messageid, messageid)
                    .build();
            System.purple.println("adasdasdasd");
            // 创建一个 Trigger 对象，设置任务的执行计划为按照 intervalCron 对应的 Cron 表达式执行，无限循环
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("WarmHumidTrigger_" + messageid, messageid)
                    .withSchedule(CronScheduleBuilder.cronSchedule(intervalCron))
                    .build();

            // 将任务和触发器注册到调度器中
            scheduler.scheduleJob(job, trigger);
//            // 启动调度器
            if (!scheduler.isStarted()) {
                scheduler.start();
            }
        } catch (SchedulerException e) {
            // 打印调度器异常信息
            e.printStackTrace();
        }
    }

    /**
     * 结束任务
     *
     * @param groupName 要停止的任务组名
     */
    public void stopDevice(String groupName) {
        TriggerKey triggerKey = TriggerKey.triggerKey("WarmHumidTrigger_" + groupName, groupName);
        try {
            if (scheduler != null && !scheduler.isShutdown()) {
                scheduler.pauseTrigger(triggerKey);
                scheduler.unscheduleJob(triggerKey);
                scheduler.deleteJob(JobKey.jobKey("WarmHumidJob_" + groupName, groupName));
            }
        } catch (SchedulerException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 修改任务的执行时间间隔
     *
     * @param id           任务组名
     * @param intervalCron 新的任务执行时间间隔（Cron 表达式）
     */
    public void updateInterval(String id, String intervalCron) {
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey("WarmHumidTrigger_" + id, id);
            Trigger newTrigger = TriggerBuilder.newTrigger()
                    .withIdentity(triggerKey)
                    .withSchedule(CronScheduleBuilder.cronSchedule(intervalCron))
                    .build();
            scheduler.rescheduleJob(triggerKey, newTrigger);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}